package maintest;

import static org.junit.Assert.*;

import org.junit.Test;

import main.AbstractAnalyseurRang;
import main.AnalyseurMain;
import main.AnalyseurRangCouleur;
import main.Main;
import main.RangPoker;

import cartes.Carte;
import cartes.CouleurCarte;
import cartes.Denomination;

public class AnalyseurRangCouleurTest {
	
	private AbstractAnalyseurRang analyseur;
	private Main main;
	private Main rang;
	private RangPoker rangPoker;

	@Test
	public void testNull() {
		main = null;
		analyseur = new AnalyseurRangCouleur();
		assertTrue(analyseur.reconnaitreMain(main).compareTo(new RangPoker()) == 0);
	}
	
	@Test
	public void test0Faux() {
		main = new Main();
		analyseur = new AnalyseurRangCouleur();
		assertTrue(analyseur.reconnaitreMain(main).compareTo(new RangPoker()) == 0);
	}
	
	@Test
	public void test1Faux() {
		main = new Main();
		analyseur = new AnalyseurRangCouleur();
		for(int i = 0; i < 1; i++) {
			main.add(new Carte(Denomination.AS, CouleurCarte.CARREAU));
		}
		assertTrue(analyseur.reconnaitreMain(main).compareTo(new RangPoker()) == 0);
	}
	
	@Test
	public void test2Faux() {
		main = new Main();
		analyseur = new AnalyseurRangCouleur();
		for(int i = 0; i < 2; i++) {
			main.add(new Carte(Denomination.AS, CouleurCarte.CARREAU));
		}
		assertTrue(analyseur.reconnaitreMain(main).compareTo(new RangPoker()) == 0);
	}
	
	@Test
	public void test3Faux() {
		main = new Main();
		analyseur = new AnalyseurRangCouleur();
		for(int i = 0; i < 3; i++) {
			main.add(new Carte(Denomination.AS, CouleurCarte.CARREAU));
		}
		assertTrue(analyseur.reconnaitreMain(main).compareTo(new RangPoker()) == 0);
	}
	
	@Test
	public void test4Faux() {
		main = new Main();
		analyseur = new AnalyseurRangCouleur();
		for(int i = 0; i < 4; i++) {
			main.add(new Carte(Denomination.AS, CouleurCarte.CARREAU));
		}
		assertTrue(analyseur.reconnaitreMain(main).compareTo(new RangPoker()) == 0);
	}
	
	@Test
	public void test6Faux() {
		main = new Main();
		analyseur = new AnalyseurRangCouleur();
		for(int i = 0; i < 6; i++) {
			main.add(new Carte(Denomination.AS, CouleurCarte.CARREAU));
		}
		assertTrue(analyseur.reconnaitreMain(main).compareTo(new RangPoker()) == 0);
	}
	
	@Test
	public void test5Vrai() {
		rang = new Main();
		analyseur = new AnalyseurRangCouleur();
		rangPoker = RangPoker.COULEUR;
		
		for(int i = 0; i < 5; i++) {
			rang.add(new Carte(Denomination.DENOMINATIONS.get(i), CouleurCarte.CARREAU));
		}
		
		rangPoker.setPoidsRang(AnalyseurMain.determinePoidsDuRang(rang));
		
		assertTrue(analyseur.reconnaitreMain(rang).compareTo(rangPoker) == 0);
	}
	
	@Test
	public void test6Vrai() {
		main = new Main();
		rang = new Main();
		analyseur = new AnalyseurRangCouleur();
		rangPoker = RangPoker.COULEUR;
		
		for(int i = 0; i < 5; i++) {
			rang.add(new Carte(Denomination.DENOMINATIONS.get(i), CouleurCarte.CARREAU));
		}
		
		rangPoker.setPoidsRang(AnalyseurMain.determinePoidsDuRang(rang));
		
		for(int i = 0; i < 1; i++) {
			main.add(new Carte(Denomination.DENOMINATIONS.get(i), CouleurCarte.COULEURS.get(i%4)));
		}
		
		main.addAll(rang);
		
		rangPoker.setPoidsKicker(AnalyseurMain.determinePoidsDesKickersSansRang(main, rang));
		
		assertTrue(analyseur.reconnaitreMain(main).compareTo(rangPoker) == 0);
	}

}